class Vertice:
    def __init__(self, indice, label):
        self.indice = indice # Índice. Baseado meramente na quantidade de vértices.
        self.label = label # Remete à cor
        self.adjacentes = []
        self.grauSaturacao = 0

    def addAdjacente(self,vertice):
        self.adjacentes.append(vertice)

    def calculaSaturacao(self):
        """
        Calcula o grau de saturação (número de adjacentes coloridos) do vértice atual.
        """
        self.grauSaturacao = 0
        for adjacente in self.adjacentes:
            if adjacente.getLabel() != "":
                self.grauSaturacao += 1

    def getLabel(self):
        return self.label

    def setLabel(self, valor):
        self.label = valor

    def getSaturacao(self):
        return self.grauSaturacao

    def aumentaSaturacao(self):
        self.grauSaturacao += 1

    def diminuiSaturacao(self):
        self.grauSaturacao += 1

    def aumentaSaturacaoAdjacentes(self):
        for adjacente in self.adjacentes:
            adjacente.aumentaSaturacao()

    def diminuiSaturacaoAdjacentes(self):
        for adjacente in self.adjacentes:
            adjacente.diminuiSaturacao()

    def getPossibleColors(self, ordem):
        setPossibilidades = set(list(range(1,ordem+1))) # Teoricamente, o número de cores possíveis é baseado na ordem do tabuleiro.
        jaExiste = set()
        for adjacente in self.adjacentes: # Percorre os adjacentes do vértice
            if adjacente.getLabel() != "":   # Vértice colorido.
                jaExiste.add(int(adjacente.getLabel()))  # Define a cor como em uso.
        setPossibilidades = setPossibilidades - jaExiste # Remove cores em uso da lista de possíveis cores.
        if (len(setPossibilidades) == 0):
            return -1
        return list(setPossibilidades)